What are you trying to do with this system clock? What Arduino are you using? Your system clock is dependent upon the accuracy of the main processor clock which may or may not be accurate enough for what you are trying to achieve. The frequency pulses from an RTC like the ds3231 are more likely to be accurate.
As arduino system clocks are not very stable nor calibrated at exactly 18 MHz, you can simply observe how much it is wrong and correct that in your interval (make it 1001 or whatever needed).
But you will see it will also be temperature dependent...
The clock in the Arduino is a resonator rated for +/-0.5%. If I did my quick math correctly that's about 7 minutes a day "worst case". Not as good as a regular crystal or the crystal in a watch or RTC which is "trimmed" for high accuracy.
millis() should not be worse than that.
With long time periods you can get drift and with short measurements every processor instruction requires some time so you might not be reading millis() exactly when you think you are reading it.
Overall millis() won't drift any more than the clock (resonator) but depending on how your code is written errors can accumulate.